using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Collections;
using ClickSocial.Framework;
using System.Data.SqlClient;

namespace ClickSocial.Data
{
    public class VentaDal : BaseDal
    {
        #region Constructor(es)
        public VentaDal() { table = "cs_Venta"; } 
        #endregion

        #region CRUD
        public long Insert(string cliente, double monto, DateTime fecha, string estado, int cantidad)
        {
            return Convert.ToInt64(DB.ClickSocial.ExecuteScalar("cs_venta_spInsert", cliente, monto, fecha, estado, cantidad));
        }

        public void Delete(long id)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_venta_spDelete", id);
        }

        public void Delete(long id, string fotografo)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_venta_spDeleteByFotografo", id, fotografo);
        }

        public void Update(long ventaId, string cliente, double monto, DateTime fecha, string estado, int cantidad)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_venta_spUpdate", ventaId, cliente, monto, fecha, estado, cantidad, DateTime.Now);
        }

        public void UpdateEstado(long ventaId, string estado)
        {
            DB.ClickSocial.ExecuteNonQuery("cs_venta_spUpdateEstado", ventaId, estado);
        }
        #endregion

        #region List

        /*public IDataReader GetFotografosByVentaId(long id)
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetFotografosByVentaId", id);            
        }*/

        public IDataReader GetOne(long id, string cliente)
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetOnebyCliente", id, cliente);
        }

        public IDataReader GetOne(long id)
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetOne", id);            
        }

        public IDataReader GetAll()
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetAll");            
        }

        public IDataReader GetAllByFotografo(string fotografo)
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetAllByFotografo", fotografo);
        }

        public IDataReader GetAllByCliente(string cliente)
        {
            return DB.ClickSocial.ExecuteReader("cs_venta_spGetAllByCliente", cliente);
        }

        public IDataReader BuscarVentas(DateTime? desde, DateTime? hasta, string estado, string campo, string texto, string fotografo)
        {

            SqlCommand cmd = (SqlCommand)DB.ClickSocial.DbProviderFactory.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "cs_venta_spBuscarVentas";

            SqlParameter pdesde = (SqlParameter)DB.ClickSocial.DbProviderFactory.CreateParameter();
            pdesde.SqlDbType = SqlDbType.DateTime;
            pdesde.IsNullable = true;
            pdesde.ParameterName = "@Desde";
            pdesde.Value = (desde.HasValue ? desde.Value : Convert.DBNull );
            cmd.Parameters.Add(pdesde);
            
            SqlParameter phasta = (SqlParameter)DB.ClickSocial.DbProviderFactory.CreateParameter();
            phasta.SqlDbType = SqlDbType.DateTime;
            phasta.IsNullable = true;
            phasta.ParameterName = "@Hasta";
            phasta.Value = (hasta.HasValue ? hasta.Value : Convert.DBNull);
            cmd.Parameters.Add(phasta);

            cmd.Parameters.Add("@Estado", SqlDbType.NVarChar, 50).Value = estado;
            cmd.Parameters.Add("@Campo", SqlDbType.NVarChar, 256).Value = campo;
            cmd.Parameters.Add("@Texto", SqlDbType.NVarChar, 2000).Value = texto;
            cmd.Parameters.Add("@Fotografo", SqlDbType.NVarChar, 256).Value = fotografo;

            return DB.ClickSocial.ExecuteReader(cmd);
            
        }
        #endregion
    }
}
